// 路由鉴权：判断路由能不能被访问
// 引入路由
import router from './router'
// 引入进度条
import nprogress from 'nprogress'
// 引入进度条的样式
import 'nprogress/nprogress.css'
// 引入setting
import setting from './setting'
// 获取用户仓库中的token,用于判断用户是否登录成功
import useUserStore from './store/modules/user'
// 由于本文件在路由组件之外,所以要另外引入pinia
import pinia from './store'
const userStore = useUserStore(pinia)
// 全局路由：每一个路由跳转的时候都会触发
// 全局前置路由守卫
router.beforeEach(async (to: any, from: any, next: any) => {
  document.title = `${setting.title} - ${to.meta.title}`
  // to:去哪个路由
  // from:从哪个路由来
  // next:允许跳转
  console.log(to, from)
  nprogress.start()
  // 先获取用户的token
  const token = userStore.token
  // 获取用户名
  const username = userStore.username
  // 判断用户登录
  if (token) {
    // 登录成功之后,访问login是不可以的,会跳转到首页
    if (to.path == '/login') {
      next({ path: '/' })
    } else {
      // 去的不是login,就正常跳转
      // 有用户信息
      if (username) {
        next()
      } else {
        // 重新获取用户信息
        try {
          await userStore.userInfo()
          // 有可能出现当前路由是异步路由，获取到了用户信息但是路由还没有加载完毕,会出现空白页面
          next({ ...to })
        } catch {
          // 获取用户信息失败,token失效或者用户自己修改了本地存储的token
          // 退出登录，删除用户的所以信息  要使用await，执行之后才退出
          await userStore.userLogout()
          next({ path: '/login', query: { redirect: to.path } })
        }
      }
    }
  } else {
    // 用户未登录
    if (to.path == '/login') {
      // 去的是login,放行
      next()
    } else {
      // 去的不是login,就要跳回login并且携带query参数
      next({ path: '/login', query: { redirect: to.path } })
    }
  }
  next({ ...to })
})
// 全局后置路由守卫
router.afterEach((to: any, from: any) => {
  console.log(to, from)
  nprogress.done()
})
